#include <iostream>

// 尾递归
// 时间复杂度：O(n)
// 空间复杂度：O(n)
long factorial(int n, long res) {
    if (n <= 0) return 0;
    // 最小子问题
    if (n == 1) return res;
    return factorial(n - 1, n * res);
}

int main() {
    long res = factorial(6, 1);
    std::cout << res;
}